package com.example.handler;

import com.example.model.FraudRiskResult;
import com.example.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

/**
 * 地域冲突风险处理器
 * 处理地域冲突类型的风险
 * 
 * @author system
 */
@Component
@RequiredArgsConstructor
@Slf4j
public class LocationConflictRiskHandler implements RiskHandler {

  private final UserService userService;

  @Override
  public boolean canHandle(FraudRiskResult result) {
    return result.getRiskType() == 3; // 地域冲突类型
  }

  @Override
  public void handle(FraudRiskResult result) {
    if (!canHandle(result)) {
      return;
    }

    log.info("处理地域冲突风险，用户地址：{}，风险评分：{}", result.getUserAddress(), result.getScore());

    // 根据风险等级采取不同措施
    switch (result.getRiskLevel()) {
      case 2: // 高风险
        // 要求用户进行位置验证
//        userService.requireLocationVerification(result.getUserAddress());
        log.warn("发现高风险地域冲突行为，已要求位置验证，用户地址：{}", result.getUserAddress());
        break;
      case 1: // 中风险
        // 记录异常位置并通知用户
//        userService.notifyAbnormalLocation(result.getUserAddress());
        log.warn("发现中风险地域冲突行为，已通知用户，用户地址：{}", result.getUserAddress());
        break;
      case 0: // 低风险
        // 记录日志，增加监控频率
        log.info("发现低风险地域冲突行为，增加监控频率，用户地址：{}", result.getUserAddress());
        break;
      default:
        log.info("未知风险等级，用户地址：{}", result.getUserAddress());
    }
  }

  @Override
  public int getOrder() {
    return 12; // 风险类型处理器优先级低于风险等级处理器和资金异常处理器
  }
}